import router from './router'
import store from './store'
import NProgress from 'nprogress' // 进度条插件
import 'nprogress/nprogress.css' // 进度条样式
import { getToken } from '@/utils/auth'

NProgress.configure({
    showSpinner: false
}) // 进度条配置

const whiteList = ['/login']

const routerPackag = routers => {
    routers.forEach(itemRouter => {
        router.addRoute(itemRouter)
    });
  };

router.beforeEach(async (to, from, next) => {
    // 进度条开始
    NProgress.start()
    // 获取路由 meta 中的title，并设置给页面标题
    // document.title = to.meta.title
    document.title = "管理后台"
    // 获取用户登录的token
    const hasToken = getToken()
    // 判断当前用户是否登录
    if (hasToken) {
        if (to.path === '/login') {
            next({ path: '/' })
            NProgress.done()
        } else {
            const hasRouters = store.getters.routes && store.getters.routes.length > 0
            if (hasRouters) {
                next()
            } else {
                try {
                    await store.dispatch("user/getInfo");
                    // 获取 路由表
                   let accessRoutes = await store.dispatch('user/generateRoutes')
                    // 动态添加路由到router内
                    routerPackag(accessRoutes)
                   next({ ...to, replace: true })
                } catch (error) {
                    console.log(error)
                    await store.dispatch("user/resetToken");
                    // 清除用户登录信息后，回跳到登录页去
                    next(`/login?redirect=${to.path}`)
                    NProgress.done()
                }
            }
        }
    } else {
        document.title = to.meta.title
        // 用户未登录
        if (whiteList.indexOf(to.path) !== -1) {
            // 需要跳转的路由是否是whiteList中的路由，若是，则直接条状
            next()
        } else {
            // 需要跳转的路由不是whiteList中的路由，直接跳转到登录页
            next(`/login?redirect=${to.path}`)
            // 结束精度条
            NProgress.done()
        }
    }
})

router.afterEach(() => {
    // 结束精度条
    NProgress.done()
})